package com.cskaoyan.javase.oop2._1extends._10final._2method;

import com.sun.deploy.perf.PerfRollup;

/**
 * final修饰方法
 * final修饰方法表示最后的方法，最终的方法，表示该方法无法被重写.
 * （但是仍然可以被继承）。
 *
 * 语法：
 * [访问权限修饰符] final 返回值类型 方法名(形参列表){
 *  //方法体
 * }
 *
 * 说明：
 * final修饰成员方法，表示该方法无法被重写，但是仍然是可以继承的。
 *
 * 什么样的成员方法应该设置为final呢？final方法在实际开发中要比final类更常见一些.
 *
 * 1.方法的设计已经比较完善，不需要子类进行修改了
 *      子类只需要乖乖继承，使用父类的实现即可。
 *      尤其是一旦修改就会导致问题、bug等时，就必须将方法设置为final修饰。
 *
 * 2.即便是父类的方法不是很完善，但只要是希望子类不要改写方法都可以这么做。
 * （要么你就用，不爽你就自己实现一个）
 *
 * 同样比较多见于JDK源码中，比较常见的有：
 * 像Object类中的getClass()方法还有其中和线程相关的方法。
 *
 * @since 16:26
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        s.test();
    }
}

class Person {
    final void eat() {
        System.out.println("人都要吃饭,都要吃正常的饭~");
    }
}

class LaoBa extends Person {
    /*@Override
    void eat() {
        System.out.println("干了兄弟们xxx");
    }*/
}

class Father {
    final void test() {
        System.out.println("father");
    }
}

class Son extends Father {
    // @Override
    // void test() {
    //     super.test();
    // }
}